/** 
 * @file Flotantes.java
 * 
 * @author Luis Ernesto Carrera Retana
 * @date 2009-08-22
 */

package estadistec.logica.tipos;


import estadistec.logica.tabla.MFlotante;

import estadistec.excepciones.ExcepcionCapacidadExcedida;
import estadistec.excepciones.ExcepcionCapacidadNegativa;

/** 
 * Se incluye para formatear la conversión a string de los números.
 */
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.Locale;

/** 
 * Clase para los valores de tipo Flotante.
 *
 * @todo Quiero definir algunas cosas para el formato de números
 * al inicio y no tener que hacerlo en cada caso.
 **/
public class Flotantes extends Valores<Float> {

	/** 
	 * Guarda el número de decimales.
	 */
	private int _noDecimales;

	/** 
	 * Guarda el formato para convertir a un string.
	 */
	private DecimalFormat _miFormato;

	/** 
	 * Constructor. 
	 *
	 * Para las excepciones @see estadistec.logica.tipos.Valores#Valores
	 */
	public Flotantes (int noCasos) 
		throws ExcepcionCapacidadNegativa, ExcepcionCapacidadExcedida
	{
		super(noCasos);
		_noDecimales = -1;
		DecimalFormatSymbols dfs = new DecimalFormatSymbols(Locale.ENGLISH);
		_miFormato = new DecimalFormat("#####0.###", dfs);
		this.setValorXDefecto("0.0");
	}

	/** 
	 * @see estadistec.logica.tipos.Valores#getTipo
	 */
	public TipoValor getTipo() {
		return TipoValor.FLOTANTE;
	}

	/** 
	 * @see estadistec.logica.tipos.Valores#setNoDecimales
	 */
	public void setNoDecimales (int n) {
		this._noDecimales = n;
		if ( n == 0 )
		{
			_miFormato.applyPattern("#####0");
		}else
		{
			_miFormato.applyPattern("#####0." + "000000".substring(0,n));
		}
	}

	/** 
	 * @see estadistec.logica.tipos.Valores#getNoDecimales
	 */
	public int getNoDecimales () {
		return this._noDecimales;
	}

	/** 
	 * @see estadistec.logica.tabla.MFlotante#obtenerValor
	 */
	protected Float _obtenerValor (String texto)  
	{
		return MFlotante.obtenerValor(texto);
	}

	/** 
	 * Convierte un valor de tipo Float a un string.
	 */
	protected String _obtenerTexto(Float valor) 
	{
		String salida;
		if (valor == null)
			salida = new String();
		else
			salida = this._miFormato.format(valor.doubleValue());
		return salida;
	}

}
